package com.wyf.springbootmybatis.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.github.pagehelper.util.StringUtil;

import com.wyf.springbootmybatis.dao.UserMapper;
import com.wyf.springbootmybatis.po.User;
import com.wyf.springbootmybatis.query.UserQuery;
import com.wyf.springbootmybatis.service.UserService;
import com.wyf.springbootmybatis.util.AssertUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

    @Resource
    private UserMapper userMapper;

    /**
     * 通过用户名查询用户对象
     * @param userName
     * @return
     */
    public User queryUserByName(String userName) {
        Map<String, Object> columnMap = new HashMap<String, Object>();
        columnMap.put("user_name", "wyf");
        List<User> users = userMapper.selectByMap(columnMap);
        return users.get(0);
        // return userMapper.queryUserByName(userName);
    }

    public User queryUserById(Integer userId) {
        System.out.println("测试热部署111.....11111");
        return userMapper.selectById(userId);
        // return userMapper.queryUserById(userId);
    }

    /**
     * 添加用户
     *  1.参数校验（用户名，密码非空）
     *  2.调用Dao层的添加方法，返回受影响的行数
     *  3.判断受影响的行数，成功？失败？
     * @param user
     */
    public void addUser(User user) {
        // 判断用户名是否为空
        AssertUtil.isTrue(StringUtils.isBlank(user.getUserName()), "用户姓名不能为空");
        // 判断用户密码是否为空
        AssertUtil.isTrue(StringUtils.isBlank(user.getUserPwd()), "用户密码不能为空");
        // 判断用户名是否存在
        AssertUtil.isTrue(userMapper.queryUserByName(user.getUserName()) != null, "用户名已存在");
        // 执行添加操作，判断受影响的行数
        AssertUtil.isTrue(userMapper.addUser(user) < 1, "添加用户失败");
    }

    /**
     * 修改用户
     *  1.参数校验（用户名，密码）
     *  2.判断用户名是否村子
     *  3.执行更新，判断受影响行数
     * @param user
     */
    public void updateUser(User user) {
        // // 判断用户ID
        // AssertUtil.isTrue(user.getUserId() == null, "用户数据异常");
        // // 判断用户名是否为空
        // AssertUtil.isTrue(StringUtils.isBlank(user.getUserName()), "用户姓名不能为空");
        // // 判断用户密码是否为空
        // AssertUtil.isTrue(StringUtils.isBlank(user.getUserPwd()), "用户密码不能为空");
        // // 判断该用户是不是自己
        AssertUtil.isTrue(userMapper.queryUserByName(user.getUserName()).getUserId() != user.getUserId()
                , "用户名已存在");

        AssertUtil.isTrue(userMapper.updateUser(user) < 1, "修改用户失败");
    }

    /**
     * 删除用户
     *  1.判断参数非空，且删除的记录存在
     *  2.执行删除，判断受影响的行数
     */
    public void deleteUserById(Integer userId) {
        // 判断用户ID
        AssertUtil.isTrue(userId == null || userMapper.queryUserById(userId) == null, "删除用户不存在");
        // 判断是否删除成功
        AssertUtil.isTrue(userMapper.deleteUserById(userId) < 1, "删除用户失败");
    }

    public PageInfo<User> queryUserByParams(UserQuery userQuery) {
        // 开启分页
        PageHelper.startPage(userQuery.getPageNum(), userQuery.getPageSize());

        // 查询用户集合
        List<User> userList = userMapper.queryUserByParams(userQuery);

        // 分页查询
        PageInfo<User> pageInfo = new PageInfo<>(userList);
        return pageInfo;
    }
}
